package algorithm;

/**
 * @author 真香
 * @create 2021-07-12 22:19
 *  算法
 */
public class MyArray {

    private  int[] array = null;

    private int size ;

    public MyArray(int capacity) {
        this.array = new int[capacity];
        this.size = 0;
    }


    /**
     * 数组插入元素
     * @param index     插入位置
     * @param element   插入的元素
     */
    public void insert(int index, int  element) throws Exception{
        // 判断访问的下表是=是否超出范围
        if (index <0 || index > size) {
            throw new IndexOutOfBoundsException("数组元素角标越界异常");
        }

        // 如果实际元素达到数组容量上限， 则对数组进行扩容
        if (size >= array.length) {
            resize();
        }

        // 向左循环遍历， 将元素逐个挪动
        for (int  i= size-1; i>= index;i--) {
            array[i+1] = array[i];
        }
        // 将腾出来的空位值放入新元素
        array[index] = element;
        size++;
    }

    /**
     * 打印数组
     */
    public void  output(){
        for (int i = 0; i < size; i++) {
            System.out.println(array[i]);
        }
    }


    /**
     *  数组扩容
     */
    private void resize(){
        int[] newArray = new int[array.length*2];
        // 老数组复制值到新数组
        System.arraycopy(array,0,newArray,0,array.length);
        array = newArray;

    }

    public static void main(String[] args) throws Exception {

        MyArray myArray = new MyArray(10);
        myArray.insert(0,3);
        myArray.insert(1,7);
        myArray.insert(2,9);
        myArray.output();
    }




}
